↳ Prolog
↳ PrologToPiTRSProof
log_in(s(X), s(Y)) → U2(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, Y, half_out(s(X), Z)) → U3(X, Y, log_in(Z, Y))
log_in(0, s(0)) → log_out(0, s(0))
U3(X, Y, log_out(Z, Y)) → log_out(s(X), s(Y))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
log_in(s(X), s(Y)) → U2(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, Y, half_out(s(X), Z)) → U3(X, Y, log_in(Z, Y))
log_in(0, s(0)) → log_out(0, s(0))
U3(X, Y, log_out(Z, Y)) → log_out(s(X), s(Y))
LOG_IN(s(X), s(Y)) → U21(X, Y, half_in(s(X), Z))
LOG_IN(s(X), s(Y)) → HALF_IN(s(X), Z)
HALF_IN(s(s(X)), s(Y)) → U11(X, Y, half_in(X, Y))
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
U21(X, Y, half_out(s(X), Z)) → U31(X, Y, log_in(Z, Y))
U21(X, Y, half_out(s(X), Z)) → LOG_IN(Z, Y)
log_in(s(X), s(Y)) → U2(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, Y, half_out(s(X), Z)) → U3(X, Y, log_in(Z, Y))
log_in(0, s(0)) → log_out(0, s(0))
U3(X, Y, log_out(Z, Y)) → log_out(s(X), s(Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
LOG_IN(s(X), s(Y)) → U21(X, Y, half_in(s(X), Z))
LOG_IN(s(X), s(Y)) → HALF_IN(s(X), Z)
HALF_IN(s(s(X)), s(Y)) → U11(X, Y, half_in(X, Y))
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
U21(X, Y, half_out(s(X), Z)) → U31(X, Y, log_in(Z, Y))
U21(X, Y, half_out(s(X), Z)) → LOG_IN(Z, Y)
log_in(s(X), s(Y)) → U2(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, Y, half_out(s(X), Z)) → U3(X, Y, log_in(Z, Y))
log_in(0, s(0)) → log_out(0, s(0))
U3(X, Y, log_out(Z, Y)) → log_out(s(X), s(Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
log_in(s(X), s(Y)) → U2(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, Y, half_out(s(X), Z)) → U3(X, Y, log_in(Z, Y))
log_in(0, s(0)) → log_out(0, s(0))
U3(X, Y, log_out(Z, Y)) → log_out(s(X), s(Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
HALF_IN(s(s(X))) → HALF_IN(X)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U21(X, Y, half_out(s(X), Z)) → LOG_IN(Z, Y)
LOG_IN(s(X), s(Y)) → U21(X, Y, half_in(s(X), Z))
log_in(s(X), s(Y)) → U2(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, Y, half_out(s(X), Z)) → U3(X, Y, log_in(Z, Y))
log_in(0, s(0)) → log_out(0, s(0))
U3(X, Y, log_out(Z, Y)) → log_out(s(X), s(Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U21(X, Y, half_out(s(X), Z)) → LOG_IN(Z, Y)
LOG_IN(s(X), s(Y)) → U21(X, Y, half_in(s(X), Z))
half_in(s(s(X)), s(Y)) → U1(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
U1(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
half_in(0, 0) → half_out(0, 0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
LOG_IN(s(X)) → U21(half_in(s(X)))
U21(half_out(Z)) → LOG_IN(Z)
half_in(s(s(X))) → U1(half_in(X))
half_in(s(0)) → half_out(0)
U1(half_out(Y)) → half_out(s(Y))
half_in(0) → half_out(0)
half_in(x0)
U1(x0)
half_in(s(0)) → half_out(0)
POL(0) = 1
POL(LOG_IN(x1)) = 2·x1
POL(U1(x1)) = 2·x1
POL(U21(x1)) = 2·x1
POL(half_in(x1)) = x1
POL(half_out(x1)) = x1
POL(s(x1)) = 2·x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
LOG_IN(s(X)) → U21(half_in(s(X)))
U21(half_out(Z)) → LOG_IN(Z)
half_in(s(s(X))) → U1(half_in(X))
U1(half_out(Y)) → half_out(s(Y))
half_in(0) → half_out(0)
half_in(x0)
U1(x0)
half_in(s(s(X))) → U1(half_in(X))
POL(0) = 0
POL(LOG_IN(x1)) = 2·x1
POL(U1(x1)) = 2 + x1
POL(U21(x1)) = 2·x1
POL(half_in(x1)) = x1
POL(half_out(x1)) = x1
POL(s(x1)) = 2 + x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
LOG_IN(s(X)) → U21(half_in(s(X)))
U21(half_out(Z)) → LOG_IN(Z)
U1(half_out(Y)) → half_out(s(Y))
half_in(0) → half_out(0)
half_in(x0)
U1(x0)